package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.CheckItemDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 检查项服务
 *
 * @Service(interfaceClass = CheckItemService.class) : dubbo+zookeeper在和spring声明式事务一起使用的时候，会有兼容性问题，此种方式
 * 可以告诉dubbo+zookeeper发布的服务是哪种类型，dubbo+zookeeper高版本没有此问题，低版本不行
 */
@Service(interfaceClass = CheckItemService.class)
@Transactional
public class CheckItemServiceImpl implements CheckItemService {

    //注入dao对象
    @Autowired
    private CheckItemDao checkItemDao;

    /**
     * 新增检查项
     *
     * @param checkItem
     */
    public void add(CheckItem checkItem) {
        checkItemDao.add(checkItem);
    }


    /**
     * 条件 分页 查询
     * 检查项分页查询
     *
     * @param queryPageBean
     * @return
     */

    public PageResult pageQuery(QueryPageBean queryPageBean) {
        //获取页面传过来的数据
        Integer currentPage = queryPageBean.getCurrentPage();//当前页
        Integer pageSize = queryPageBean.getPageSize();//每页显示的数据
        String queryString = queryPageBean.getQueryString();//查询条件

        //2.分页操作
        //一个请求对应一个线程，请求结束，线程结束，请求线程
        //PageHeler是将分页参数和当前的请求线程绑定到一起，会将下一条sql语句进行sql语句拼接，形成分页操作
        //原sql:select * from t_checkitem  拼接之后sql：select * from t_checkitem limit 1,10
        //参数1：当前页；参数2：每页显示条数

        //PageHelper完成分页查询，基于Mybatis 框架提供的分页
        PageHelper.startPage(currentPage, pageSize);
        //条件查询
        Page<CheckItem> page = checkItemDao.selectByCondition(queryString);

        //执行条件查询：select * from t_checkitem where name=? or code=?
        //pagehlper会拦截sql语句执行，拼接sql语句 ： select * from t_checkitem where name=? or code=? limit 0,10

        //总条数
        long total = page.getTotal();
        //查询的数据
        List<CheckItem> rows = page.getResult();

        //   /*
        //    int pages = page.getPages();
        //  System.out.println("总页数："+pages);

        //  int pageNum = page.getPageNum();
        //System.out.println("当前页："+pageNum);
//
        //int pageSize1 = page.getPageSize();
        // System.out.println("每页显示条数："+pageSize1);
        // */

        return new PageResult(total, rows);

        //扩展，以上分页只能返回分页含义的结果，不能获取所有的数据，可以采用以下做法
    /*
    public PageResult pageQuery(QueryPageBean queryPageBean) {
        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        String queryString = queryPageBean.getQueryString();//查询条件


        //完成分页查询，基于mybatis框架提供的分页助手插件完成
        PageHelper.startPage(currentPage,pageSize);

        List<CheckItem> rows = checkItemDao.selectByConditionAll(queryString);
        PageInfo page = new PageInfo(rows);

        System.out.println("当前页："+pageInfo.getPageNum());
        System.out.println("每页显示条数："+pageInfo.getPageSize());
        System.out.println("总条数："+pageInfo.getTotal());
        System.out.println("总页数："+pageInfo.getPages());
        System.out.println("上一页："+pageInfo.getPrePage());
        System.out.println("下一页："+pageInfo.getNextPage());
        System.out.println("是否是第一页："+pageInfo.isIsFirstPage());
        System.out.println("是否是最后一页："+pageInfo.isIsLastPage());


        long total = page.getTotal();

        return new PageResult(total,rows);
    }
    */
    }

    /**
     * 根据id删除检查项
     *
     * @param id
     * @return
     */
    public void deleteById(Integer id) {
        //判断当前检查项是否已经关联到检查组
        long count = checkItemDao.findCountByCheckItemId(id);
        if (count > 0) {
            //当前检查项已经被关联到检查组，不允许删除
            new RuntimeException();
        }
        checkItemDao.deleteById(id);

    }

    /**
     * //编辑检查项
     * @param checkItem
     */

    public void edit(CheckItem checkItem) {
        checkItemDao.edit(checkItem);
    }

    /**
     * 实现数据回显 方可进行编辑检查项
     * @param id
     * @return
     */
    @Override
    public CheckItem findById(Integer id) {
        return checkItemDao.findById(id);
    }

    /**
     *
     * @return
     */
    public List<CheckItem> findAll() {
        return checkItemDao.findAll();
    }

}
